
Adélia Cruz
Neural Network Developer

Web scraping é um método usado para extrair dados de sites. No Golang, a biblioteca Colly é uma ferramenta popular para web scraping devido à sua simplicidade e recursos poderosos. Este guia o levará por meio da configuração de um projeto Golang com o Colly, construção de um raspador básico, tratamento de cenários complexos de extração de dados e otimização dos seus raspadores com requisições concorrentes.
Antes de começar, certifique-se de que o Go está instalado no seu sistema. Inicialize seu projeto e obtenha o pacote Colly com os seguintes comandos:
go mod init my_scraper
go get -u github.com/gocolly/colly
Isso configura o diretório do seu projeto e instala o pacote Colly.
Resgatar Seu Código de Bônus do CapSolver
Aumente seu orçamento de automação instantaneamente!
Use o código de bônus CAPN ao recarregar sua conta do CapSolver para obter um bônus extra de 5% em cada recarga — sem limites.
Resgatar agora no seu Painel do CapSolver
.
Vamos criar um raspador básico para extrair todos os links de uma página específica do Wikipedia.
main.go e adicione o seguinte código:package main
import (
"fmt"
"github.com/gocolly/colly"
)
func main() {
c := colly.NewCollector(
colly.AllowedDomains("en.wikipedia.org"),
)
c.OnHTML(".mw-parser-output", func(e *colly.HTMLElement) {
links := e.ChildAttrs("a", "href")
fmt.Println(links)
})
c.Visit("https://en.wikipedia.org/wiki/Web_scraping")
}
Este código inicializa um novo coletor do Colly restrito a en.wikipedia.org, em seguida, configura um callback para encontrar e imprimir todos os links dentro do div .mw-parser-output da página.
Para tarefas mais complexas, como raspagem de dados de tabela e gravação em um arquivo CSV, você pode usar o pacote encoding/csv no Go:
main.go com o seguinte código para raspar dados de tabela:package main
import (
"encoding/csv"
"log"
"os"
"github.com/gocolly/colly"
)
func main() {
fName := "data.csv"
file, err := os.Create(fName)
if err != nil {
log.Fatalf("Não foi possível criar o arquivo, err: %q", err)
return
}
defer file.Close()
writer := csv.NewWriter(file)
defer writer.Flush()
c := colly.NewCollector()
c.OnHTML("table.wikitable", func(e *colly.HTMLElement) {
e.ForEach("tr", func(_ int, row *colly.HTMLElement) {
rowData := []string{}
row.ForEach("td", func(_ int, cell *colly.HTMLElement) {
rowData = append(rowData, cell.Text)
})
writer.Write(rowData)
})
})
c.Visit("https://en.wikipedia.org/wiki/List_of_programming_languages")
}
Este script raspa dados de tabela de uma página do Wikipedia e os escreve no data.csv.
Para acelerar a raspagem, você pode fazer requisições concorrentes usando goroutines do Go. Aqui está como você pode raspar múltiplas páginas concorrentemente:
package main
import (
"fmt"
"github.com/gocolly/colly"
"sync"
)
func scrape(url string, wg *sync.WaitGroup) {
defer wg.Done()
c := colly.NewCollector()
c.OnHTML("title", func(e *colly.HTMLElement) {
fmt.Println("Título encontrado:", e.Text)
})
c.Visit(url)
}
func main() {
var wg sync.WaitGroup
urls := []string{
"https://en.wikipedia.org/wiki/Web_scraping",
"https://en.wikipedia.org/wiki/Data_mining",
"https://en.wikipedia.org/wiki/Screen_scraping",
}
for _, url := range urls {
wg.Add(1)
go scrape(url, &wg)
}
wg.Wait()
}
Neste exemplo, definimos uma função scrape que recebe uma URL e um grupo de espera como argumentos. A função inicializa um coletor do Colly, configura um callback para imprimir o título da página e visita a URL. A função main cria um grupo de espera, itera sobre uma lista de URLs e inicia uma goroutine para cada URL para raspar concorrentemente.
Ao seguir estes passos, você pode construir raspadores robustos em Golang usando o Colly, lidar com diversos cenários de raspagem e otimizar o desempenho com requisições concorrentes. Para tutoriais mais detalhados e uso avançado, consulte recursos sobre raspagem de web com Go e Colly.
Além do Colly, existem várias outras excelentes bibliotecas para raspagem de web no Golang:
A raspagem de web é uma habilidade poderosa e essencial para extrair dados de sites de forma eficiente. Usando o Golang e a biblioteca Colly, você pode construir raspadores robustos que lidam com diversos cenários de extração de dados, desde a coleta de links simples até a extração de dados de tabelas complexas e otimizar o desempenho com requisições concorrentes.
Neste guia, você aprendeu como:
Ao seguir estes passos, você pode criar raspadores de web eficazes e eficientes no Golang, aproveitando a simplicidade e os recursos poderosos do Colly. Para uso avançado e tutoriais detalhados, explore recursos adicionais sobre raspagem de web com Go e Colly.
Sim. O Colly foi projetado para ser simples e amigável para iniciantes, oferecendo recursos poderosos como parsing de DOM, tratamento de requisições, callbacks e concorrência. Mesmo desenvolvedores novos em Go podem rapidamente construir um raspador funcional com apenas algumas linhas de código.
Absolutamente. O Colly permite a seleção de nós e atributos específicos do HTML, o que torna fácil extrair tabelas, listas, links e outros elementos estruturados. Você também pode armazenar os resultados diretamente em arquivos como CSV ou JSON usando as bibliotecas padrão do Go.
Você pode usar as goroutines do Go para processar múltiplas páginas em paralelo. Ao lançar raspadores concorrentemente e sincronizá-los com um grupo de espera, o desempenho da raspagem aumenta significativamente — especialmente para conjuntos de dados grandes ou tarefas de varredura de múltiplas URLs.
Aprenda arquitetura de raspagem web escalável em Rust com reqwest, scraper, raspagem assíncrona, raspagem de navegador headless, rotação de proxies e tratamento de CAPTCHA compatível.

Compare o Selenium vs Puppeteer para resolver CAPTCHA. Descubra benchmarks de desempenho, notas de estabilidade e como integrar o CapSolver para o máximo de sucesso.
